Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


scripts/dev-local.sh e41daa5b65e07a5baa1aaad32d97f90482f1cd1c (e41daa5b) Text, 2.69 KB

T8b949e#!/usr/bin/env bash
T8b949e# Vite HMR (http://127.0.0.1:5173) plus MeshChat backend (HTTPS on MESHCHAT_PORT).
T8b949e# Vite proxies /api and /ws to https://127.0.0.1:$MESHCHAT_PORT.
Tffa657set -euo pipefail

Te6edf3ROOTTff7b72=Ta5d6ff"Tff7b72$(Tffa657cd Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Tffd700${Te6edf3BASH_SOURCETb4b4b4[0]Tffd700}Ta5d6ff"Tff7b72)Ta5d6ff/..Ta5d6ff" Tff7b72&& Tffa657pwdTff7b72)Ta5d6ff"
Tffa657cd Ta5d6ff"Te6edf3$ROOTTa5d6ff"

Tffa657export Te6edf3MESHCHAT_PORTTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHAT_PORTTff7b72:-Te6edf38000Tffd700}Ta5d6ff"
Tffa657export Te6edf3E2E_BACKEND_PORTTff7b72=Ta5d6ff"Te6edf3$MESHCHAT_PORTTa5d6ff"

Te6edf3BE_PIDTff7b72=Ta5d6ff""
cleanupTff7b72(Tff7b72) Tff7b72{
Tff7b72if Tff7b72[Tff7b72[ -n Ta5d6ff"Te6edf3$BE_PIDTa5d6ff" Tff7b72]Tff7b72] Tff7b72&& Tffa657kill -0 Ta5d6ff"Te6edf3$BE_PIDTa5d6ff" T79c0ff2>/dev/nullTb4b4b4; Tff7b72then
Tffa657kill Ta5d6ff"Te6edf3$BE_PIDTa5d6ff" T79c0ff2>/dev/null Tff7b72|| Tffa657true
Tffa657wait Ta5d6ff"Te6edf3$BE_PIDTa5d6ff" T79c0ff2>/dev/null Tff7b72|| Tffa657true
Tff7b72fi
Tff7b72}
Tffa657trap cleanup EXIT INT TERM

uv run python -m meshchatx.meshchat --headless --host T79c0ff127.0.0.1 --port Ta5d6ff"Te6edf3$MESHCHAT_PORTTa5d6ff" Tb4b4b4&
Te6edf3BE_PIDTff7b72=Te6edf3$!

Te6edf3BACKEND_URLTff7b72=Ta5d6ff"Ta5d6ffhttps://127.0.0.1:Tffd700${Te6edf3MESHCHAT_PORTTffd700}Ta5d6ff/api/v1/statusTa5d6ff"
Te6edf3BACKEND_WAIT_SECSTff7b72=Ta5d6ff"Tffd700${Te6edf3DEV_BACKEND_WAITTff7b72:-Te6edf3120Tffd700}Ta5d6ff"
Te6edf3BACKEND_POLL_INTERVALTff7b72=Ta5d6ff"Tffd700${Te6edf3DEV_BACKEND_POLL_INTERVALTff7b72:-Te6edf30Tb4b4b4.5Tffd700}Ta5d6ff"
Te6edf3deadlineTff7b72=Tff7b72$((Te6edf3SECONDS Tff7b72+ Te6edf3BACKEND_WAIT_SECSTff7b72))

tcp_connectableTff7b72(Tff7b72) Tff7b72{
T8b949e# Returns 0 when a TCP handshake to 127.0.0.1:MESHCHAT_PORT completes.
python3 - Ta5d6ff"Te6edf3$MESHCHAT_PORTTa5d6ff" Ta5d6ff<<'PY'
import socket, sys
port = int(sys.argv[1])
try:
with socket.create_connection(("127.0.0.1", port), timeout=1.0):
raise SystemExit(0)
except OSError:
raise SystemExit(1)
PY
Tff7b72}

Tffa657echo Ta5d6ff"Ta5d6ff[dev] Waiting for backend (HTTPS) on port Tffd700${Te6edf3MESHCHAT_PORTTffd700}Ta5d6ff...Ta5d6ff"
Tffa657echo Ta5d6ff"Ta5d6ff[dev] Probe: Tffd700${Te6edf3BACKEND_URLTffd700}Ta5d6ff"
Te6edf3saw_listenTff7b72=T79c0ff0
Tff7b72while Tff7b72(Tff7b72( SECONDS < deadline Tff7b72)Tff7b72)Tb4b4b4; Tff7b72do
Tff7b72if ! Tffa657kill -0 Ta5d6ff"Te6edf3$BE_PIDTa5d6ff" T79c0ff2>/dev/nullTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"[dev] Backend process exited before becoming ready." >Tb4b4b4&T79c0ff2
Tffa657wait Ta5d6ff"Te6edf3$BE_PIDTa5d6ff" T79c0ff2>/dev/null Tff7b72|| Tffa657true
Tffa657exit T79c0ff1
Tff7b72fi
Tff7b72if ss -ltn Ta5d6ff"Ta5d6ff( sport = :Tffd700${Te6edf3MESHCHAT_PORTTffd700}Ta5d6ff )Ta5d6ff" T79c0ff2>/dev/null Tb4b4b4| grep -q LISTENTb4b4b4; Tff7b72then
Te6edf3saw_listenTff7b72=T79c0ff1
Tff7b72fi
T8b949e# Use /api/v1/status. It is exempt from auth and the still-starting 503 gate
T8b949e# so the Vite process can start while deferred network finishes.
Tff7b72if curl -fsSk --max-time T79c0ff2 Ta5d6ff"Te6edf3$BACKEND_URLTa5d6ff" >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"[dev] Backend ready."
Tff7b72break
Tff7b72fi
sleep Ta5d6ff"Te6edf3$BACKEND_POLL_INTERVALTa5d6ff"
Tff7b72done

Tff7b72if ! curl -fsSk --max-time T79c0ff2 Ta5d6ff"Te6edf3$BACKEND_URLTa5d6ff" >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ff[dev] Backend did not respond on Tffd700${Te6edf3BACKEND_URLTffd700}Ta5d6ff within Tffd700${Te6edf3BACKEND_WAIT_SECSTffd700}Ta5d6ffs.Ta5d6ff" >Tb4b4b4&T79c0ff2
Tff7b72if Tff7b72(Tff7b72( saw_listen Tff7b72)Tff7b72) Tff7b72&& ! tcp_connectableTb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ff[dev] Port Tffd700${Te6edf3MESHCHAT_PORTTffd700}Ta5d6ff is LISTEN but TCP handshakes time out.Ta5d6ff" >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff"[dev] Something on this host is blackholing that port (firewall / Netbird / VPN)." >Tb4b4b4&T79c0ff2
Tffa657echo Ta5d6ff"[dev] Retry with a free port, for example: MESHCHAT_PORT=8002 task dev" >Tb4b4b4&T79c0ff2
Tff7b72fi
Tffa657exit T79c0ff1
Tff7b72fi

Te6edf3VITE_HOSTTff7b72=Ta5d6ff"Tffd700${Te6edf3VITE_DEV_HOSTTff7b72:-Te6edf3127Tb4b4b4.0.0.1Tffd700}Ta5d6ff"
Te6edf3VITE_PORTTff7b72=Ta5d6ff"Tffd700${Te6edf3VITE_DEV_PORTTff7b72:-Te6edf35173Tffd700}Ta5d6ff"

Tffa657echo Ta5d6ff"Ta5d6ff[dev] Starting Vite at http://Tffd700${Te6edf3VITE_HOSTTffd700}Ta5d6ff:Tffd700${Te6edf3VITE_PORTTffd700}Ta5d6ff (API proxy -> Tffd700${Te6edf3BACKEND_URLTb4b4b4%/api/v1/statusTffd700}Ta5d6ff)Ta5d6ff"
pnpm run dev -- --host Ta5d6ff"Te6edf3$VITE_HOSTTa5d6ff" --port Ta5d6ff"Te6edf3$VITE_PORTTa5d6ff"


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────